package com.example.smartpark.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.smartpark.dto.PaymentDTO;
import com.example.smartpark.dto.PaymentQueryDTO;

import java.util.Map;

/**
 * 支付服务接口
 */
public interface PaymentService {

    /**
     * 分页查询支付记录
     *
     * @param queryDTO 查询条件
     * @return 支付记录分页结果
     */
    IPage<PaymentDTO> getPaymentPage(PaymentQueryDTO queryDTO);

    /**
     * 查询支付记录详情
     *
     * @param id 支付记录ID
     * @return 支付记录详情
     */
    PaymentDTO getPaymentById(Long id);

    /**
     * 创建支付订单
     *
     * @param paymentDTO 支付DTO
     * @return 创建的支付订单
     */
    PaymentDTO createPayment(PaymentDTO paymentDTO);

    /**
     * 更新支付状态为已支付
     *
     * @param id 支付记录ID
     * @param transactionId 交易流水号
     * @return 更新后的支付记录
     */
    PaymentDTO completePayment(Long id, String transactionId);

    /**
     * 取消支付
     *
     * @param id 支付记录ID
     * @param remark 取消原因
     * @return 取消后的支付记录
     */
    PaymentDTO cancelPayment(Long id, String remark);

    /**
     * 退款
     *
     * @param id 支付记录ID
     * @param remark 退款原因
     * @return 退款后的支付记录
     */
    PaymentDTO refundPayment(Long id, String remark);

    /**
     * 根据订单号查询支付记录
     * 
     * @param orderNumber 订单号
     * @return 支付记录
     */
    PaymentDTO getPaymentByOrderNumber(String orderNumber);

    /**
     * 获取支付统计信息
     *
     * @return 支付统计信息
     */
    Map<String, Object> getPaymentStatistics();

    /**
     * 更新支付方式
     *
     * @param id 支付记录ID
     * @param paymentMethod 支付方式
     */
    void updatePaymentMethod(Long id, Integer paymentMethod);
} 